package com.example.springboot.service;

import cn.hutool.core.util.ObjectUtil;
import com.example.springboot.common.ResultCode;
import com.example.springboot.common.config.JwtTokenUtils;
import com.example.springboot.dao.UserDao;
import com.example.springboot.entity.Account;
import com.example.springboot.entity.User;
import com.example.springboot.entity.User;
import com.example.springboot.exception.CustomException;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserService {
	@Resource
	UserDao userDao;
	public List<User> GetAll() {
		return userDao.selectAll();
	}

	public User userLogin(User user) {

//        1.拿到用户传来的用户名，先到数据库查看这个用户名是否存在,如果不存在抛出异常：“用户不存在”
		User dbUser = userDao.findByName(user.getUserName());
		if (ObjectUtil.isEmpty(dbUser)){
			throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
		}
//        2.如果用户存在，则那用户输入的密码跟数据库找到的用户的密码比对，密码输入正确，允许登录
		String password = user.getPassword(); //用户输入的密码
		String dbPassword = dbUser.getPassword(); // 数据库找到用户的密码

		if (!password.equalsIgnoreCase(dbPassword)){
			throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
		}

		return dbUser;

	}

	public User findById(Integer id) {

		return userDao.findById(id);
	}

	public User userRegister(User user) {

		String userName = user.getUserName();
//     1.先校验用户名是不是为空： 如果用户名，为空，抛出异常
		if (ObjectUtil.isEmpty(userName)){
			throw new CustomException(ResultCode.USERNAME_ISNULL);
		}
//     2.校验用户名的唯一性：
		User dbUser = userDao.findByName(userName);
		if (ObjectUtil.isNotEmpty(dbUser)) {
			throw new CustomException(ResultCode.USER_EXIST_ERROR);
		}
		if (ObjectUtil.isEmpty(user.getAvatar())) {
			user.setAvatar("http://localhost:9090/files/default.jpg");
		}
		if(ObjectUtil.isEmpty(user.getPassword())) {
			user.setPassword("123");
		}
		userDao.insertSelective(user);
		return user;
	}

	public void delete(Integer id) {
		userDao.deleteByPrimaryKey(id);
	}



	public User userEdit(User user) {

		String userName = user.getUserName();
//     校验用户名是不是为空： 如果用户名，为空，抛出异常
		if (ObjectUtil.isEmpty(userName)){
			throw new CustomException(ResultCode.USERNAME_ISNULL);
		}
		userDao.updateByPrimaryKeySelective(user);

		return user;
	}

	// 分页查询和模糊查询的方法
	//PageInfo 里面装的是分页后分装的数据，返回值也要用PageInfo.of()包裹
	public PageInfo<User> findPage(User search, Integer pageNum, Integer pageSize) {
		//获取当前用户，判断当前用户是否处于登录状态
		Account user = JwtTokenUtils.getCurrentUser();//获取当前用户
		if (ObjectUtil.isEmpty(user)) {
			throw new CustomException(ResultCode.USER_NOT_LOGIN);
		}
		// 开启分页（开启分页后一定是操作数据库）
		PageHelper.startPage(pageNum, pageSize);
		List<User> all = findByCondition(search);

		return PageInfo.of(all);
	}

	// 根据条件查询的方法
	public List<User> findByCondition(User search) {
		return userDao.findBySearch(search);
	}

}
